package ar.com.tallerdos.smartdinner.model;

import java.util.Collections;
import java.util.List;

import com.google.gson.annotations.Expose;

public class Mesa implements Identity, Comparable<Mesa> {
    
    public enum MesaEstado {
	libre, abierta, reservada
    }

    @Expose
    private Integer id;

    @Expose
    private Integer codigo;

    @Expose
    private Integer capacidadMaxima;

    @Expose
    private Integer posX;    

    @Expose
    private Integer posY;

    @Expose
    private Boolean activo;
    
    @Expose
    private MesaEstado estado;

    public Mesa() {
    }
 
    public Mesa(Integer id, Integer capacidadMaxima, Integer codigo) {
	this.id = id;
	this.capacidadMaxima = capacidadMaxima;
	this.codigo = codigo;
    }
    
    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public Integer getCodigo() {
        return codigo;
    }

    public void setCodigo(Integer codigo) {
        this.codigo = codigo;
    }

    public Integer getCapacidadMaxima() {
        return capacidadMaxima;
    }

    public void setCapacidadMaxima(Integer capacidadMaxima) {
        this.capacidadMaxima = capacidadMaxima;
    }

    public Integer getPosX() {
        return posX;
    }

    public void setPosX(Integer posX) {
        this.posX = posX;
    }

    public Integer getPosY() {
        return posY;
    }

    public void setPosY(Integer posY) {
        this.posY = posY;
    }

    public Boolean getActivo() {
        return activo;
    }

    public void setActivo(Boolean activo) {
        this.activo = activo;
    }

    public MesaEstado getEstado() {
        return estado;
    }

    public void setEstado(MesaEstado estado) {
        this.estado = estado;
    }
    
    public void setEstado(Integer intEstado) {
	if (intEstado == 0) {
	    this.estado = MesaEstado.libre;
	} else if (intEstado == 1) {
	    this.estado = MesaEstado.abierta;	    
	} else if (intEstado == 2) {
	    this.estado = MesaEstado.reservada;	    
	}
    }
    
    

    @Override
    public int hashCode() {
	final int prime = 31;
	int result = 1;
	result = prime * result + ((id == null) ? 0 : id.hashCode());
	return result;
    }

    @Override
    public boolean equals(Object obj) {
	if (this == obj)
	    return true;
	if (obj == null)
	    return false;
	if (getClass() != obj.getClass())
	    return false;
	Mesa other = (Mesa) obj;
	if (id == null) {
	    if (other.id != null)
		return false;
	} else if (!id.equals(other.id))
	    return false;
	return true;
    }

    @Override
    public int compareTo(Mesa another) {
	return this.id.compareTo(another.id);
    }
    
    public static boolean sonIguales(List<Mesa> col1, List<Mesa> col2) {
	if (col1.size() != col2.size()) {
	    return false;
	}
	Collections.sort(col1);
	Collections.sort(col2);
	int i = 0;
	for (Mesa mesa : col1) {	    
	    if (!mesa.equals(col2.get(i))) {
		return false;
	    }
	    i++;
	}
	return true;
    }
    
    @Override
    public String toString() {
        return "Mesa: " + this.codigo;
    }
}
